﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using colasContinua.Salas;

namespace colasContinua.GrupoVisitante
{
   public class GrupoVisita
    {

       public Enumeraciones.EstadoGrupoVisita EstadoVisita { get; set; }
       public List<Sala> salas;
       public int CantadidadLote { get; set; }
       public double HoraInicioRecorrido { get; set; }
       public double HoraFinRecorrido { get; set; }
       public Sala SalaActual { get; set; }
       public int nroVisita { get; set; }
       public int cantSalasPorRecorrer { get; set; }
       public GrupoVisita() 
       { 
            salas=new List<Sala>();
            AgregarSalas_A_Recorrido();
            cantSalasPorRecorrer = Cantidad_DeSalas_A_Recorrer();
            Calcular_CantidadLote(); 
       }
       
       private void AgregarSalas_A_Recorrido() 
       {
           
           salas.Add(SalaC.getInstancia());
           SalaActual = SalaC.getInstancia();
           double x = new Random().NextDouble();
           if(x<0.70){
               salas.Add(SalaD.getInstancia());
           }

       }
       
       public void Calcular_CantidadLote()
       {

           double A = Math.Exp(-3);
           var r = new Random();
           double p = 1;
           int x = 0;
           do
           {
               var U = r.NextDouble();
               p = p * U;
               x = x + 1;
           }
           while (p >= A);
           CantadidadLote = x;



       }
       
       public void CambiarEstado(Enumeraciones.EstadoGrupoVisita estado) {

           EstadoVisita = estado;
       }
       
       public int Cantidad_DeSalas_A_Recorrer() {

          return salas.Count();
       }
       
       public bool TieneProximoRecorrido() {

           if (Cantidad_DeSalas_A_Recorrer() > 1 && cantSalasPorRecorrer > 0) {

               SalaActual = SalaD.getInstancia();
               return true;
           }
          
           SalaActual = null;
           return false;
           
       
       }


       
       

    }
}
